#ifndef SMFLASH_H
#define SMFLASH_H

#include "sys.h"

#define STM32_FLASH_BASE 0x8000000U     // STM32 FLASH的起始地址
#define bootLoaderAddr STM32_FLASH_BASE /* boot 最大 20K */

#define configure 0x08005000    /* 20k */
#define configureEnd 0x080057FF /* 20+2k结束 */

#define configureBack 0x08005800    /* 22k */
#define configureBackEnd 0x08005FFF /* 24K */

#define startFlashAddr 0x08006000 /* 用户区起始地址 */
#define app0Addr 0x08006000      /* 24k */

#define STM32_FLASH_SIZE 256

/* 芯片类型4个字节 */
void cpuChipType(uint32_t *cpuType);
/* flash大小两个字节大小 */
void getFlashSize(u16 *flashSize);
/* cpuid 长度是 3个u32长度 */
void GetChipID(uint32_t *cpuID);

uint32_t getAppAddr(void);

u16 STMFLASH_ReadHalfWord(u32 faddr);  //读出半字
// void STMFLASH_WriteLenByte(u32 WriteAddr, u32 DataToWrite, u16 Len);
// //指定地址开始写入指定长度的数据 u32 STMFLASH_ReadLenByte(u32 ReadAddr, u16
// Len);  //指定地址开始读取指定长度数据
void STMFLASH_Write(u32 WriteAddr, u16 *pBuffer,
                    u16 NumToWrite);  //从指定地址开始写入指定长度的数据
void STMFLASH_Read(u32 ReadAddr, u16 *pBuffer,
                   u16 NumToRead);  //从指定地址开始读出指定长度的数据

#endif  // SMFLASH_H
